#ifndef _RINGFIFO_H
#define _RINGFIFO_H

#include <stdint.h>
#include <string.h>

typedef struct _RingFIFO_t
{
    uint8_t *buffer; // 缓冲区指针
    uint16_t size;   // 缓冲区大小
    uint16_t head;   // 头索引
    uint16_t tail;   // 尾索引
} RingFIFO_t;

uint16_t RingFIFO_Init(RingFIFO_t *fifo, uint8_t *buffer, uint16_t size);
uint16_t RingFIFO_Write(RingFIFO_t *fifo, const uint8_t *data, uint16_t length);
uint16_t RingFIFO_Read(RingFIFO_t *fifo, uint8_t *data, uint16_t length);
uint16_t RingFIFO_Size(RingFIFO_t *fifo);
uint8_t RingFIFO_GetValueAtIndex(RingFIFO_t *fifo, uint16_t index);
uint16_t RingFIFO_UpdateHeadIndex(RingFIFO_t *fifo, uint16_t length);
uint16_t RingFIFO_SetHeadIndex(RingFIFO_t *fifo, uint16_t head);
uint16_t RingFIFO_Clear(RingFIFO_t *fifo);
void RingFIFO_SetZero(RingFIFO_t *fifo);

#endif
